/**
 * ========== API请求 ==========
 * 书写规则说明:
 * 1，封装了两个基础的ajax方法；主要是因为原有接口和新接口的数据传递格式有变化；要根据不同接口情况使用不同的方法：
 *    ajax_post: application/x-www-form-urlencoded，
 *    ajax_post_json: application/json
 *
 * 2，参数格式规则: {arg1:val1, arg2: val2，arg3: val3 ……}
 *    在保持api请求参数只占一个参数位的原则下，尽量简洁而方便的调用api；
 *    因此，如果接口只需要一个参数，则api方法应该书写为只需要传入对应val值即可（参考 api.clientConsult() ）
 *    其他一个以上的参数，则保持对象格式传入；
 *
 * */


let api = {
    /** 获取用户信息 */
    getUserInfo: function (cb) {
        ajax_json("/user", null, 2,'GET',{
            succ: function (json) {
                json.user = funs.mappingUser(json.user);
                cb && cb.succ && cb.succ(json);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        })
    },
    /** 获取项目详情 */
    getDemandInfo: function (data, cb) {
        ajax_json("/demand", data,3,'GET',{
            succ: function (json) {
                globalData.pack.bid_point = json.info.leave_bid_point;
                let info = funs.mappingDemand(json.info);
                cb && cb.succ && cb.succ(info);
            },
            fail: function (json) {
                cb && cb.fail && cb.fail(json);
            }
        });
    },
    /** 获取项目参与的工程商列表 */
    getParticInfo: function (data, cb) {
        ajax_json("/demand", {id:data.demand_id,partic:"partic"},3,'GET', {
            succ: function (json) {
                json.partic_supplier_list = funs.mappingDemandSupplier(json.partic_supplier_list);
                if (JSON.stringify(json.bronze_partic_info) == "{}") {
                    json.bronze_partic_info = {
                        'id': 0,  // 工程商（用户）id
                        'id_': 0,  // 工程商（用户）id
                        'nickname': '',  // 昵称
                        'hide_nickname': '',
                        'mobile': '', // 参与工程商手机,
                        'follow_type': 0,//1 - 锁定 2-继续跟进 3-取消跟进
                        'status': 0
                    }
                };
                cb && cb.succ && cb.succ(json);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        });
    },
    /** 获取账户信息 */
    getMyPack: function (cb) {
        ajax_json("/user", null, 1,'GET', cb);
    },
    /** 获取可购买套餐信息 */
    getPackSet: function (cb) {
        ajax_json("/pack_set", null, 1,'GET',cb);
    },
    /** 购买新项目提醒 */
    buySmsPoints: function (data, cb) {
        ajax_json("/buy/sms_points", data,1,'POST', cb);
    },
    /** 购买铜牌服务 */
    bronzePoints: function (data, cb) {
        ajax_json("/buy/bronze_medal_discount",data,1,'POST', cb);
    },
    /** 项目浏览量+1 */
    demandAddScan: function (data, cb) {
        ajax_json("/demand/"+data.id+"/scan", null,1,'POST', cb);
    },
    /** 抢单 */
    bidDemand: function (data, cb) {
        ajax_json("/demand/"+data.id+"/bid", data,1,'POST', cb);
    },
    /** 退单信息反馈 */
    feedback: function (data, cb) {
        ajax_json("/demand/"+data.demand_id+"/feedback",data,1,'POST', cb);
    },
    /** 获取反馈选项 */
    feedbackTypes: function (data, cb) {
        ajax_json("/demand/"+data.demand_id+"/feedback", null,1,'GET', cb);
    },
    /** 记录是否显示过了升级提示信息 */
    notifyLevel: function (data, cb) {
        ajax_json("/user/notify", data,1,'PUT', cb);
    },






};

/** ajax请求方法 (application/json)
 *
 * queryModel:  1 ==> body  ({key:value})
 *              2 ==> query (?key=val)
 *              3 ==> path  (/val1/val2)
 *
 * type: 'GET'/'POST'/'PUT'
 *
 */
function ajax_json(url, data, queryModel, type, cb) {
    // 88ba
    let URL = APIURL + url;
    let config = null;
    if (queryModel == 1) {
        config = JSON.stringify(data);
    } else if (queryModel == 2) {
        if (data) {
            let queryString = '';
            $.each(data, function (key, value) {
                queryString += (key + '=' + value + '&');
            });
            URL += '?' + queryString;
        }
    } else if (queryModel == 3) {
        let queryString = '';
        $.each(data, function (key, value) {
            queryString += ('/' + value);
        });
        URL += queryString;
    }
    $.ajax(URL, $.extend({
        method: type,
        data: config,

        dataType: "json",
        timeout: 30000,
        // xhrFields: {
        //     withCredentials: true
        // },
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'token': globalData.token
        },
        contentType: 'application/json',
        success: function (json, status, xhr) {
            cb && cb.always && cb.always(json);
            if (json.status == "200") {
                cb && cb.succ && cb.succ(json.body);
            } else {
                cb && cb.fail && cb.fail(json);
            }
        },
        error: function (xhr, status, thrown) {
            // 通知app端token失效
            if(xhr.status == 401){
                AppUtil.jsCallAppParam(2,{});
            }
            let fail = JSON.parse(xhr.responseText);
            fail.msg = fail.body;
            console.log("[!err!](" + url + "): status: " + xhr.status + ", msg: " + thrown);
            cb && cb.fail && cb.fail(fail);
            console.error("接口[" + url + "]：失败");
        }
    }));
}